/*
 *  Лицензия MIT
 * 
 *  Copyright 2011 Salnikov Aleksey.
 * 
 *  Данная лицензия разрешает, безвозмездно, лицам, получившим копию данного программного обеспечения
 *  и сопутствующей документации (в дальнейшем именуемыми "Программное Обеспечение"),
 *  использовать Программное Обеспечение без ограничений, включая неограниченное право
 *  на использование, копирование, изменение, объединение, публикацию, распространение,
 *  сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам,
 *  которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:
 * 
 *  Вышеупомянутый копирайт и данные условия должны быть включены во все копии или значимые
 *  части данного Программного Обеспечения.
 * 
 *  ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ ЛЮБОГО ВИДА ГАРАНТИЙ,
 *  ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ,
 *  СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И НЕНАРУШЕНИЯ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ
 *  НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ
 *  ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ
 *  С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
 *  ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.
 */

package CommonTools;

import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JTable;
import look.DemandsWindow;

/**
 * Класс, который будет заниматься проверкой заявок и
 * вызовом соответствующих событий (уведомлений и обновлений)
 * Выполняется в отдельном потоке (:
 *
 * @author Salnikov Aleksey
 */
public class CheckerDemands extends Thread{

    private DemandsWindow dw; //Окно с зявками
    private int maxDemandId; //максимальный id заявки. По максимальному id будем отслеживать все заявки
    private int countDemands; //Количество заявок, чтобы отследить разницу и вывести количество новых
    private boolean firstCicle = true; //Первый цикл, т.е. первый запуск, тогда сравнения не идет

    public CheckerDemands(DemandsWindow dw)
    {
        this.dw = dw;
    }

    @Override
    public void run()
    {
        //Циклим навечно
        long time;
        ArrayList<Integer> stat;
        while (true)
        {
            //Обновляем таймер из настроек
            time = Long.parseLong(Settings.getParametrValue("timer"));
            
            //Если время положительное (то есть таймер не отключен)
            if (time > 0)
            {
             
                //получаем статистику
                int newId = Actions.getStatistic();
                //Если это запуск впервые
                if (firstCicle)
                {
                    this.maxDemandId = newId;
                    firstCicle = false;
                }
                //Иначе проверяем, а потом присваиваем новые значения
                else
                {
                    if (newId > maxDemandId)
                    {
                        DesignTools.showMessageWindowNewDemand();
                        //Обновляем таблицу заявок
                        //this.dw.getLeftPanel().filterDemands();
                    }

                    //Обновляем данные
                    this.maxDemandId = newId;
                    //Обновляем таблицу. Это может понадобиться при смене администратора у заявки
                    this.dw.getLeftPanel().filterDemands();
                    //Обновляем администраторов и компьютеры
                    Actions.refreshAdminComboBox(this.dw.getLeftPanel().getAdminCb(), false);
                    Actions.refreshAdminComboBox(this.dw.getLeftPanel().getAdminRightCb(), false);
                    Actions.refreshComputers(this.dw.getLeftPanel().getComputersCb());
                }                
            }
            try {
                sleep(time);
            } catch (InterruptedException ex) {
            }
        }
    }

}
